package com.example.demotest.service;

import com.example.demotest.pojo.Order;
import com.example.demotest.pojo.OrderStatus;
import com.example.demotest.pojo.dto.OrderCreateDto;
import com.example.demotest.pojo.dto.OrderDetailDto;
import com.example.demotest.pojo.dto.OrderPayDto;
import com.example.demotest.pojo.dto.OrderStatusDto;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;

import java.util.List;
import java.util.Map;

public interface IOrderService {

    @Transactional
    Order createOrder(Integer buyerId, OrderCreateDto orderDto);

    OrderDetailDto getOrderDetail(Integer orderId, Integer userId);

    @Transactional
    boolean payOrder(Integer orderId, Integer userId, OrderPayDto payDto);

    @Transactional
    boolean updateOrderStatus(Integer orderId, Integer operatorId, OrderStatusDto statusDto);

    @Transactional
    boolean deleteOrder(Integer orderId, Integer userId);

    boolean isSellerOrAdmin(Integer orderId, Integer userId);

    List<Order> findOrdersByStatus(OrderStatus status); // 获取某状态的订单，比如WAIT_SHIP

    List<Order> findOrdersByRiderId(Integer riderId);  // 获取某骑手的订单列表

    Order getOrderById(Integer orderId);
    // 通过订单ID查订单
    List<Order> getAvailableOrders();

    Order save(Order order);

    boolean updateOrderStatus(Integer orderId, OrderStatus newStatus); // 更新订单状态

    /**
     * 获取订单列表
     * @param page 页码
     * @param nums 每页数量
     * @param sort 排序方式
     * @return 订单列表和总数
     */
    Map<String, Object> getOrderList(Integer page, Integer nums, String sort);

    /**
     * 获取我买到的订单列表
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> getMyOrders(Integer userId);

    /**
     * 获取我卖出的订单列表
     * @param userId 用户ID
     * @return 订单列表
     */
    List<Order> getMySoldOrders(Integer userId);
}